package edu.qqilin.springframework.beans.factory.config;

import edu.qqilin.springframework.beans.BeansException;
import edu.qqilin.springframework.beans.factory.BeanFactory;

/**
 * Description: 具有自动装配能力的 Bean 工厂接口。
 * <p>
 * 1. 它是 {@link BeanFactory} 的扩展接口。
 * <p>
 * 2. 它的主要职责是：提供 Bean 的创建（实例化）、属性填充、初始化以及应用 BeanPostProcessor 的能力。
 * <p>
 * 3. 在 Step 06 中，我们在这里新增了两个核心方法，用于在 Bean 初始化前后执行 {@link BeanPostProcessor} 的逻辑。
 * <p>
 * 简单来说，只有实现了这个接口的 Factory，才具备在 Bean 创建过程中“动手脚”（执行扩展逻辑）的能力。
 * @author qqilin1213
 * @version 1.0
 * @date 2025/11/24 15:31
 */
public interface AutowireCapableBeanFactory extends BeanFactory {

    /**
     * 执行 BeanPostProcessors 接口实现类的 postProcessBeforeInitialization 方法
     *
     * @param existingBean
     * @param beanName
     * @return
     * @throws BeansException
     */
    Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName) throws BeansException;

    /**
     * 执行 BeanPostProcessors 接口实现类的 postProcessorsAfterInitialization 方法
     *
     * @param existingBean
     * @param beanName
     * @return
     * @throws BeansException
     */
    Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException;

}
